package com.yujiahao.bigdata.rdd.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark01_Action_CountByValues {
  def main(args: Array[String]): Unit = {
    //TODO 1、获得Spark环境的连接
    // 参数解读：setAppName("当前执行程序的名字").setMaster("当前的环境")
    // 分布式环境的基本架构为 主 - 从
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)
    //TODO 3、业务逻辑


    val rdd: RDD[Int] = sc.makeRDD(List(1, 4, 3, 2), 2)
    val rdd1: RDD[(Int, String)] = sc.makeRDD(
      List(
      (1, "a"), (1, "a"), (1, "a"), (2, "b"), (3, "c"), (3, "c")
      ))

    //TODO 行动算子 countByValue:用于统计数据集中相同的值的数量，每一条数据当成单一的都是独立的
    //就是说countByKey会将每一个键值对当做一个整体看待，如果完全一样就会记录下有多少个，返回一个Map集合，
    // 所以如果有需要的话可以将数据转换成键值对，这里会将数据当成一个整体那么就可以实现WordCount了
    val map: collection.Map[(Int, String), Long] = rdd1.countByValue()

    println("countByValue：" + map)
    //TODO 2、关闭Spark环境的连接
    sc.stop()

  }

}
